#include "string.h"
#include "stdint.h"
#include "stdio.h"

#include "FreeRTOS.h"
#include "task.h"

#include "systemMemory.h"

/* 申请动态内存，操作系统管理的安全函数 */
void *pvMemHeapMallocRtos(uint32_t iSize)
{
    return (iSize > 0) ? pvPortMalloc(iSize) : NULL;
}

/* 申请动态内存，操作系统管理的安全函数 */
void *pvMemHeapCallocRtos(uint32_t iNumber, uint32_t iSize)
{
    void *pvHandle = NULL;

    if((pvHandle = pvMemHeapMallocRtos(iNumber * iSize)) != NULL)
    {
        memset(pvHandle, 0, iNumber * iSize);
    }

    return pvHandle;
}

/* 申请动态内存，操作系统管理的安全函数 */
void *pvMemHeapReallocRtos(void *pvHandle, uint32_t iSize)
{
    void *pvHandleTemp = NULL;

    if(iSize < 1)
        return NULL;

    if((pvHandleTemp = pvMemHeapMallocRtos(iSize)) == NULL)
        return NULL;

    memcpy(pvHandleTemp, pvHandle, iSize);

    vMemHeapFreeRtos(pvHandle);

    return pvHandleTemp;
}

/* 释放动态内存，操作系统管理的安全函数 */
void vMemHeapFreeRtos(void *pvMemAddr)
{
    if(pvMemAddr == NULL)
        return;

    vPortFree(pvMemAddr);
}
